// 递归实现深拷贝方法
/**
 * 深度克隆一个对象。
 * @param {Object} obj 要进行深度克隆的对象。
 * @returns {Object} 返回obj的深度克隆副本。如果obj不是对象，则直接返回obj。
 */
const deepClone = (obj) => {
    // 当obj是对象时，进行深度克隆
    return obj instanceof Object ? Object.keys(obj).reduce((acc, cur) => {
        // 递归克隆对象的每个属性
        acc[cur] = deepClone(obj[cur]);
        return acc;
    }, {}) : obj;
};
// 测试深克隆函数
const obj1 = {"s":1,"d":2}
const obj2 = deepClone(obj1)
console.log(obj2);
console.log(obj1);
console.log(obj2 == obj1); // 输出false，证明obj2和obj1不是同一个对象的引用

// 数组冒泡排序方法
const arrpaix = (arr) => {
    // 遍历数组，每次比较相邻的两个元素并交换位置，将较大的元素逐渐往后移动
    for(let i = 0; i < arr.length; i++) {
        for(let j = 0; j < arr.length - 1; j++) {
            if(arr[j] > arr[j + 1]) {
                let temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}
// 数组选择排序方法
const arrsele = (arr) => {
    // 遍历数组，每次找到剩余元素中的最小值并与其当前位置的元素交换位置
    for(let i = 0; i < arr.length; i++) {
        let min = arr[i];
        let minIndex = i;
        for(let j = i + 1; j < arr.length; j++) {
            if(arr[j] < min) {
                min = arr[j];
                minIndex = j;
            }
        }
        let temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
}
console.log(arrpaix([1,2,3,4,5,9,4,31,12,0])); // 输出排序后的数组
console.log(arrsele([1,2,3,4,5,9,4,31,12,0])); // 输出排序后的数组